package com.guet.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtil {
    /**
     * 生成JWT
     * 使用HS256算法，私钥使用固定秘钥
     *
     * @param secretKey jwt秘钥
     * @param ttlMillis jwt过期时间（毫秒）
     * @param claims    设置的信息
     * @return JWT Token
     */
    public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
        // 设置签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        // 设置JWT的过期时间
        long expMillis = System.currentTimeMillis() + ttlMillis;
        Date exp = new Date(expMillis);

        // 生成JWT
        return Jwts.builder()
                .setClaims(claims) // 设置自定义声明
                .setExpiration(exp) // 设置过期时间
                .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8)) // 使用HS256和私钥签名
                .compact(); // 返回JWT字符串
    }
    /**
     * 解析JWT Token
     *
     * @param secretKey jwt秘钥
     * @param token     JWT Token
     * @return Claims 解析后的JWT中的Claims对象
     */
    public static Claims parseJWT(String secretKey, String token) {
        // 使用Jwts.parser()来解析JWT Token
        return Jwts.parser()
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8)) // 设置签名的秘钥
                .parseClaimsJws(token) // 解析JWT
                .getBody(); // 获取JWT的Body部分
    }
}
